import java.io.*; class ExcepcionMoneda extends Exception { public ExcepcionMoneda(String s) { super(s); } } class MonedaTablero { static char tablero[ ][ ]; static int FM = 1, CM = 1; /* posicion de la moneda FM: fila, CM : columna */ public static void inicializarTablero() { tablero = new char[3][3]; for(int i = 0; i < tablero.length; i++) for(int j = 0; j < tablero[i].length; j++) tablero[i][j] = 'x'; tablero[FM][CM] = 'o'; } public static void mostrarTablero() { System.out.println("\n\tTABLERO"); System.out.println("\n\t-------\n"); for(int i = 0; i < tablero.length; i++) { System.out.print("\t"); for(int j = 0; j < tablero[i].length; j++) System.out.print(tablero[i][j] + "\t"); System.out.println(); } } public static void mostrarOpciones() { String s = "\n\tOpciones\n\n"; s += "\t5) CENTRO 4) IZQ 6) DER 8) UP 2) DOWN"; s += "\n\tDIAGONALES --> 7,9,1,3"; s += "\n\t-1) SALIR.\n"; System.out.println(s); } public static void introduccion() { String s = "\n\n\tPROGRAMA DE LA MONEDA Y EL TABLERO BIDIMENSIONAL\n"; s += "\t------------------------------------------------\n"; s += "\n\tEl programa consiste en mover la moneda 'o' del tablero "; s += "\n\ta la izquierda, derecha, arriba, abajo o diagonal. "; s += "\n\n\tSi intentas mover la moneda fuera del tablero "; s += "\n\tel programa lanzara un excepcion."; s += "\n\n\tPara mayor comodidad puedes usar el teclado numerico (asegurate "; s += "\n\tde activar este teclado con la tecla Bloq Num)."; System.out.println(s); } public static String generarMensajeExcepcion(int f, int c) { String s = "\tLa moneda no puede salir "; if (c < 0 || c > 2 ) { if (f >= 0 && f < 3) { if(c < 0) s += "a la izquierda..."; else s+= "a la derecha..."; } else s += "en direccion de la cruz\n\tdiagonal del tablero..."; } else { if (f < 0) s+= "hacia arriba..."; else s += "hacia abajo..."; } s += "\n\tEspecifica a continuacion el movimiento de la moneda "; return s; } public static void posicionar(int opcion) throws ExcepcionMoneda { int f = FM, c = CM; /* OPCIONES de movimiento: 5.- CENTRO 6.- Derecha 4.- Izquierda 8.- Arriba 2.- Abajo 9.- Diagonal Derecha y Arriba 7.- Diagonal Izquierda y Arriba 3.- Diagonal Derecha y Abajo 1.- Diagonal Izquierda y Abajo */ switch(opcion) { case 5 : c = 1; f = 1; break; case 6 : c++; break; case 4 : c--; break; case 8 : f--; break; case 2 : f++; break; case 9 : c++; f--; break; case 7 : c--; f--; break; case 3 : c++; f++; break; case 1 : c--; f++; break; } try { tablero[f][c] = 'o'; if (FM != f || CM != c) { tablero[FM][CM] = 'x'; FM = f; CM = c; } } catch(ArrayIndexOutOfBoundsException e) { throw new ExcepcionMoneda(generarMensajeExcepcion(f,c)); } } public static void main(String[ ] args) { int opcion = 0; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); inicializarTablero(); introduccion(); try { System.out.print("\n\n\tPresiona tecla para continuar..."); in.readLine(); } catch(IOException e){ } do { try { mostrarTablero(); mostrarOpciones(); System.out.print("\n\tIngresa la opcion : "); opcion = Integer.parseInt(in.readLine()); if (opcion != -1) posicionar(opcion); } catch (ExcepcionMoneda e) { System.out.println("\n" + e.getMessage()); } catch(IOException ioe) { } } while(opcion != -1); System.out.println("\n\n\tFIN DEL PROGRAMA.\n"); } }